{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "e873bdaa",
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2023-10-13T11:46:07.098174500Z",
     "start_time": "2023-10-13T11:46:07.051261400Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import spacy\n",
    "import re\n",
    "import openpyxl\n",
    "from warnings import filterwarnings\n",
    "from collections import Counter\n",
    "from pandas import DataFrame\n",
    "\n",
    "filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f217ca20f3b1dd44",
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2023-10-13T11:46:07.107678500Z",
     "start_time": "2023-10-13T11:46:07.066843100Z"
    }
   },
   "outputs": [],
   "source": [
    "class EnDataPreprocessing:\n",
    "    \"\"\"\n",
    "    一个英文数据预处理的 工具类\n",
    "    \"\"\"\n",
    "\n",
    "    def __init__(self, data_frame):\n",
    "        \"\"\"\n",
    "        初始化 工具类\n",
    "        :param data_frame: 传入Dataframe对象\n",
    "        \"\"\"\n",
    "        df.dropna(inplace=True)\n",
    "        self.df = data_frame\n",
    "        self.nlp = spacy.load(\"en_core_web_sm\")\n",
    "\n",
    "    def convert_fullwidth_to_halfWidth(self, text):\n",
    "        '''\n",
    "        全角字符统一为半全角字符\n",
    "        '''\n",
    "        halfwidth_chars = \"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\"\n",
    "\n",
    "        # 对应的全角字符Unicode范围\n",
    "        fullwidth_chars = \"１２３４５６７８９０ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ！“＃＄％＆'（）＊＋，－．／：；＜＝＞？＠［＼］＾＿｀｛｜｝～\"\n",
    "\n",
    "        char_mapping = dict()\n",
    "        for i in range(len(halfwidth_chars)):\n",
    "            char_mapping[ord(fullwidth_chars[i])] = halfwidth_chars[i]\n",
    "        return text.translate(char_mapping)\n",
    "\n",
    "    def chinese_punctuation_to_english(self, text):\n",
    "        '''\n",
    "        中文标点符号统一为英文\n",
    "        '''\n",
    "        punctuation_mapping = {'，': ',', '。': '.', '？': '?', '！': '!', '；': ';', '：': ':', '“': '\"', '”': '\"', '‘': \"'\",\n",
    "                               '’': \"'\", '&#8203;``oaicite:{\"number\":1,\"invalid_reason\":\"Malformed citation 【': '[',\n",
    "                               '】\"}``&#8203;': ']', '（': '(', '）': ')', '《': '<', '》': '>', '、': ',', '……': '...',\n",
    "                               '·': '.',\n",
    "                               '——': '-'}\n",
    "        # 使用正则表达式替换中文标点符号\n",
    "        for ch, en in punctuation_mapping.items():\n",
    "            text = re.sub(re.escape(ch), en, text)\n",
    "        return text\n",
    "\n",
    "    def Word_Form_Reduction(self, text):\n",
    "        \"\"\"\n",
    "        词形还原\n",
    "        :param text: 文本\n",
    "        :return: \n",
    "        \"\"\"\n",
    "        doc = self.nlp(text)\n",
    "\n",
    "        # 词形还原\n",
    "        text_list = [token.lemma_ for token in doc]\n",
    "        return \" \".join(text_list)\n",
    "\n",
    "    def Abbreviation_replacement(self, text):\n",
    "        # 缩写和它们的扩展 字典\n",
    "        abbreviations = {\"can't\": 'cannot', \"it's\": 'it is', \"I'm\": 'I am', 'gonna': 'going to', 'wanna': 'want to',\n",
    "                         \"shouldn't\": 'should not', \"didn't\": 'did not', \"couldn't\": 'could not', \"doesn't\": 'does not',\n",
    "                         \"won't\": 'will not', \"i'll\": 'I will', \"you'll\": 'you will', \"he'll\": 'he will',\n",
    "                         \"she'll\": 'she will', \"we'll\": 'we will', \"they'll\": 'they will', \"I've\": 'I have',\n",
    "                         \"you've\": 'you have', \"we've\": 'we have', \"they've\": 'they have', \"I'd\": 'I would',\n",
    "                         \"you'd\": 'you would', \"he'd\": 'he would', \"she'd\": 'she would', \"we'd\": 'we would',\n",
    "                         \"they'd\": 'they would', \"haven't\": 'have not', \"hasn't\": 'has not', \"wouldn't\": 'would not',\n",
    "                         \"should've\": 'should have', \"could've\": 'could have', \"might've\": 'might have',\n",
    "                         \"must've\": 'must have', \"Can't\": 'Cannot', \"It's\": 'It is', 'Gonna': 'Going to',\n",
    "                         'Wanna': 'Want to', \"Shouldn't\": 'Should not', \"Didn't\": 'Did not', \"Couldn't\": 'Could not',\n",
    "                         \"Doesn't\": 'Does not', \"Won't\": 'Will not', \"I'll\": 'I will', \"You'll\": 'You will',\n",
    "                         \"He'll\": 'He will', \"She'll\": 'She will', \"We'll\": 'We will', \"They'll\": 'They will',\n",
    "                         \"You've\": 'You have', \"We've\": 'We have', \"They've\": 'They have', \"You'd\": 'You would',\n",
    "                         \"He'd\": 'He would', \"She'd\": 'She would', \"We'd\": 'We would', \"They'd\": 'They would',\n",
    "                         \"Haven't\": 'Have not', \"Hasn't\": 'Has not', \"Wouldn't\": 'Would not',\n",
    "                         \"Should've\": 'Should have',\n",
    "                         \"Could've\": 'Could have', \"Might've\": 'Might have', \"Must've\": 'Must have'}\n",
    "\n",
    "        # 替换缩写\n",
    "        for abbreviation, expansion in abbreviations.items():\n",
    "            # 使用正则表达式确保只替换完整的单词，而不是部分匹配\n",
    "            text = re.sub(r'\\b' + re.escape(abbreviation) + r'\\b', expansion, text)\n",
    "        return text\n",
    "\n",
    "    def replace_special_char(self, cleaned_text):\n",
    "        \"\"\"\n",
    "        去除特殊字符\n",
    "        :param cleaned_text: \n",
    "        :return: \n",
    "        \"\"\"\n",
    "        doc = self.nlp(cleaned_text)\n",
    "        # 词干化\n",
    "        cleaned_text = \" \".join([token.text for token in doc])\n",
    "\n",
    "        # 匹配各种英文序号的正则表达式\n",
    "        pattern = r'\\b(?:[A-Z]?[a-z]*\\)?|i{1,3}|IV|V?I{1,3})\\.\\s*'\n",
    "        # 使用正则表达式替换为空字符串\n",
    "        cleaned_text = re.sub(pattern, '', cleaned_text)\n",
    "\n",
    "        # 去除URLs\n",
    "        cleaned_text = re.sub(r'http\\S+|www\\S+|https\\S+', '', cleaned_text)\n",
    "\n",
    "        # 去除HTML标记\n",
    "        pattern = re.compile('<.*?>')\n",
    "        cleaned_text = re.sub(pattern, '', cleaned_text)\n",
    "\n",
    "        # 使用 spacy 去停顿词\n",
    "        doc = self.nlp(cleaned_text)\n",
    "        cleaned_text = [token.text for token in doc if not token.is_stop]\n",
    "\n",
    "        # 使用自己的停顿词list 去除停用词\n",
    "        cleaned_text = \" \".join([word for word in cleaned_text if word not in stopList and len(word) > 3])\n",
    "\n",
    "        # 去除特殊字符\n",
    "        special_char_pattern = re.compile('[^a-zA-Z0-9\\s]')\n",
    "        cleaned_text = re.sub(special_char_pattern, '', cleaned_text)\n",
    "\n",
    "        # 去掉多余的空格\n",
    "        cleaned_text = \" \".join([char.replace(\"\\\\n\", '').strip() for char in cleaned_text.split()])\n",
    "        # 去除非ASCII字符\n",
    "        cleaned_text = ''.join([char for char in cleaned_text if ord(char) < 128])\n",
    "\n",
    "        return cleaned_text\n",
    "\n",
    "    def run(self, text):\n",
    "        \"\"\"\n",
    "        文本清洗\n",
    "        :param text: \n",
    "        \"\"\"\n",
    "        # 中英文 标点符号统一  中文符号转换为英文\n",
    "        text = self.chinese_punctuation_to_english(text)\n",
    "\n",
    "        # 全角字符统一为半全角字符\n",
    "        text = self.convert_fullwidth_to_halfWidth(text.strip())\n",
    "        # 替换缩写\n",
    "        text = self.Abbreviation_replacement(text)\n",
    "\n",
    "        # 去除特殊字符\n",
    "        text = self.replace_special_char(text)\n",
    "        # 词性还原\n",
    "        text = self.Word_Form_Reduction(text)\n",
    "        return text\n",
    "\n",
    "    def data_preprocessing(self, row):\n",
    "        \"\"\"\n",
    "        清洗文本的工具函数\n",
    "        :param row: self.df 的每一行 \n",
    "        :return: 返回处理后的 self.df每一行 \n",
    "        \"\"\"\n",
    "        row['任职要求'] = self.run(row['任职要求'])\n",
    "        row['职位'] = self.run(row['职位'])\n",
    "        return row\n",
    "\n",
    "    def main_(self) -> DataFrame:\n",
    "        \"\"\"\n",
    "        执行函数\n",
    "        :return: 文本清洗后的 df \n",
    "        \"\"\"\n",
    "        self.df.apply(func=self.data_preprocessing, axis=1)\n",
    "        return self.df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "d60c0177",
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-10-13T11:47:35.552503800Z",
     "start_time": "2023-10-13T11:46:07.097174700Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "当前网站: CareerBuilder\n"
     ]
    }
   ],
   "source": [
    "workbook = openpyxl.load_workbook('../Data/数据汇总.xlsx')\n",
    "# lac = hub.Module(directory='D:\\paddlenlp_home\\paddle_hub\\modules\\lac')\n",
    "stopList = open(\"../Data/stop_words.txt\", 'r', encoding='utf-8').read().split('\\n')\n",
    "stopList.extend([\"*\", ])\n",
    "\n",
    "for sheet_name in workbook.sheetnames:\n",
    "    print(f\"当前网站: {sheet_name}\")\n",
    "    df = pd.read_excel('../Data/数据汇总.xlsx', sheet_name=sheet_name, index_col=0)\n",
    "    if re.search('[\\u4e00-\\u9fa5]', sheet_name):  # 中文网站\n",
    "        # ZhWordMark(lac,sheet_name,df,stopList).run()\n",
    "        # print(\"*-\" * 80)\n",
    "        pass\n",
    "    else:  # 英文网站\n",
    "        df = EnDataPreprocessing(df).main_()\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b5b0baaca32b7171",
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2023-10-13T11:47:35.652386600Z",
     "start_time": "2023-10-13T11:47:35.553502300Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "[('experience', 1870),\n ('work', 1755),\n ('business', 1716),\n ('datum', 1576),\n ('team', 1357),\n ('include', 1150),\n ('year', 940),\n ('support', 851),\n ('process', 797),\n ('skill', 754),\n ('analysis', 723),\n ('provide', 718),\n ('system', 687),\n ('development', 643),\n ('report', 638),\n ('management', 638),\n ('Business', 636),\n ('require', 613),\n ('ability', 611),\n ('information', 604),\n ('solution', 601),\n ('develop', 596),\n ('employee', 595),\n ('financial', 582),\n ('Data', 575),\n ('project', 567),\n ('position', 558),\n ('product', 551),\n ('opportunity', 548),\n ('role', 540),\n ('data', 537),\n ('customer', 531),\n ('Intelligence', 528),\n ('service', 512),\n ('base', 500),\n ('Analyst', 478),\n ('company', 470),\n ('drive', 466),\n ('relate', 461),\n ('client', 461),\n ('design', 460),\n ('status', 456),\n ('benefit', 455),\n ('build', 450),\n ('technology', 446),\n ('requirement', 443),\n ('tool', 436),\n ('application', 431),\n ('ensure', 430),\n ('intelligence', 427),\n ('model', 421),\n ('apply', 414),\n ('knowledge', 401),\n ('range', 399),\n ('create', 398),\n ('performance', 389),\n ('environment', 387),\n ('Skills', 387),\n ('employment', 386),\n ('strong', 383),\n ('time', 365),\n ('analytic', 362),\n ('andor', 361),\n ('technical', 356),\n ('program', 353),\n ('plan', 344),\n ('decision', 339),\n ('high', 337),\n ('level', 337),\n ('risk', 336),\n ('identify', 331),\n ('health', 329),\n ('manage', 329),\n ('disability', 325),\n ('member', 317),\n ('Management', 316),\n ('understand', 314),\n ('analytical', 314),\n ('maintain', 314),\n ('organization', 311),\n ('security', 310),\n ('complex', 306),\n ('lead', 306),\n ('perform', 303),\n ('applicant', 303),\n ('offer', 302),\n ('communication', 300),\n ('gender', 294),\n ('partner', 290),\n ('analyst', 285),\n ('internal', 284),\n ('degree', 283),\n ('strategy', 278),\n ('candidate', 277),\n ('people', 272),\n ('software', 271),\n ('protect', 265),\n ('individual', 264),\n ('market', 260),\n ('responsible', 260),\n ('stakeholder', 258),\n ('insight', 254),\n ('policy', 253),\n ('research', 252),\n ('industry', 251),\n ('problem', 248),\n ('operation', 247),\n ('relevant', 247),\n ('issue', 243),\n ('compensation', 242),\n ('learn', 239),\n ('Experience', 235),\n ('write', 235),\n ('function', 234),\n ('national', 233),\n ('improve', 232),\n ('deliver', 230),\n ('Recommended', 229),\n ('location', 228),\n ('platform', 224),\n ('analyze', 224),\n ('practice', 224),\n ('race', 219),\n ('strategic', 219),\n ('make', 218),\n ('salary', 217),\n ('Click', 216),\n ('mission', 214),\n ('professional', 214),\n ('functional', 214),\n ('activity', 213),\n ('leadership', 213),\n ('Analysis', 212),\n ('user', 211),\n ('care', 208),\n ('result', 208),\n ('education', 207),\n ('receive', 204),\n ('highly', 204),\n ('life', 203),\n ('pay', 203),\n ('world', 202),\n ('quality', 202),\n ('Financial', 202),\n ('Microsoft', 200),\n ('implement', 198),\n ('diverse', 198),\n ('orientation', 198),\n ('serve', 197),\n ('focus', 197),\n ('sale', 197),\n ('field', 197),\n ('sexual', 196),\n ('demonstrate', 195),\n ('color', 193),\n ('database', 193),\n ('solve', 192),\n ('religion', 191),\n ('culture', 189),\n ('future', 189),\n ('change', 189),\n ('meet', 188),\n ('veteran', 188),\n ('training', 187),\n ('review', 187),\n ('impact', 186),\n ('origin', 186),\n ('multiple', 185),\n ('reporting', 184),\n ('equity', 183),\n ('initiative', 182),\n ('hire', 182),\n ('career', 181),\n ('area', 181),\n ('address', 180),\n ('Information', 179),\n ('community', 178),\n ('goal', 177),\n ('leader', 175),\n ('test', 174),\n ('relationship', 174),\n ('procedure', 174),\n ('standard', 173),\n ('planning', 173),\n ('Finance', 172),\n ('communicate', 168),\n ('global', 167),\n ('Francisco', 167),\n ('identity', 166),\n ('resource', 165),\n ('improvement', 165),\n ('operational', 164),\n ('advanced', 163),\n ('source', 162),\n ('responsibility', 162),\n ('City', 162),\n ('state', 161),\n ('commit', 160),\n ('enable', 159),\n ('effective', 159),\n ('challenge', 158),\n ('California', 158),\n ('grow', 157),\n ('medical', 157),\n ('trend', 157),\n ('implementation', 157),\n ('prefer', 157),\n ('assist', 155),\n ('large', 155),\n ('growth', 154),\n ('eligible', 154),\n ('organizational', 153),\n ('equivalent', 151),\n ('accommodation', 151),\n ('Qualifications', 150),\n ('term', 150),\n ('senior', 150),\n ('Group', 149),\n ('package', 149),\n ('Opportunity', 149),\n ('employer', 149),\n ('cross', 149),\n ('exist', 148),\n ('duty', 148),\n ('Bachelor', 147),\n ('account', 147),\n ('need', 146),\n ('effectively', 146),\n ('request', 146),\n ('diversity', 145),\n ('recommend', 145),\n ('vision', 144),\n ('equal', 144),\n ('Excel', 144),\n ('capability', 144),\n ('compliance', 144),\n ('critical', 142),\n ('competitive', 142),\n ('Operations', 142),\n ('staff', 142),\n ('office', 141),\n ('external', 140),\n ('Equal', 137),\n ('qualified', 137),\n ('Knowledge', 137),\n ('dashboard', 136),\n ('federal', 136),\n ('control', 136),\n ('remove', 136),\n ('conduct', 136),\n ('define', 135),\n ('minimum', 135),\n ('detail', 134),\n ('inclusive', 133),\n ('subject', 132),\n ('department', 132),\n ('qualification', 132),\n ('live', 131),\n ('join', 131),\n ('Manager', 131),\n ('Services', 130),\n ('marketing', 130),\n ('metric', 130),\n ('specific', 129),\n ('Engineering', 129),\n ('excellent', 129),\n ('science', 129),\n ('Senior', 128),\n ('Security', 128),\n ('successful', 128),\n ('regard', 127),\n ('condition', 127),\n ('Support', 126),\n ('applicable', 126),\n ('assign', 126),\n ('computer', 126),\n ('enterprise', 125),\n ('visualization', 125),\n ('Link', 125),\n ('access', 125),\n ('portfolio', 125),\n ('forecast', 125),\n ('person', 124),\n ('limited', 124),\n ('Tableau', 124),\n ('participate', 124),\n ('value', 123),\n ('Employee', 123),\n ('monitor', 123),\n ('agency', 122),\n ('fast', 122),\n ('seek', 122),\n ('Systems', 122),\n ('cost', 121),\n ('background', 121),\n ('closely', 119),\n ('Requirements', 119),\n ('Analytics', 118),\n ('action', 118),\n ('firm', 118),\n ('presentation', 117),\n ('expertise', 117),\n ('unit', 117),\n ('help', 116),\n ('marital', 115),\n ('Work', 114),\n ('genetic', 114),\n ('Science', 114),\n ('recommendation', 113),\n ('find', 112),\n ('reasonable', 112),\n ('investment', 112),\n ('regulatory', 112),\n ('matter', 111),\n ('collaborate', 111),\n ('encourage', 110),\n ('verbal', 110),\n ('finance', 110),\n ('certification', 109),\n ('good', 109),\n ('innovative', 109),\n ('basis', 109),\n ('code', 108),\n ('success', 108),\n ('consider', 108),\n ('long', 108),\n ('engineering', 108),\n ('building', 107),\n ('insurance', 107),\n ('document', 107),\n ('Computer', 107),\n ('network', 107),\n ('documentation', 106),\n ('task', 105),\n ('testing', 105),\n ('Capgemini', 105),\n ('comprehensive', 104),\n ('group', 104),\n ('Development', 104),\n ('manager', 104),\n ('current', 104),\n ('local', 103),\n ('factor', 103),\n ('collaboration', 103),\n ('approach', 103),\n ('effort', 103),\n ('Office', 103),\n ('contact', 102),\n ('Employer', 102),\n ('forecasting', 102),\n ('threat', 102),\n ('consideration', 101),\n ('expression', 101),\n ('Python', 101),\n ('line', 101),\n ('Service', 101),\n ('Department', 100),\n ('Required', 99),\n ('bring', 99),\n ('Product', 99),\n ('evaluate', 99),\n ('digital', 99),\n ('case', 99),\n ('core', 99),\n ('objective', 98),\n ('401k', 98),\n ('variety', 98),\n ('day', 97),\n ('Accounting', 97),\n ('Program', 96),\n ('great', 96),\n ('orient', 96),\n ('Minimum', 96),\n ('direct', 96),\n ('Degree', 96),\n ('cloud', 95),\n ('innovation', 95),\n ('essential', 95),\n ('engineer', 95),\n ('family', 95),\n ('workplace', 94),\n ('public', 94),\n ('regulation', 94),\n ('determine', 94),\n ('priority', 93),\n ('dental', 93),\n ('Human', 93),\n ('contract', 93),\n ('utilize', 92),\n ('inclusion', 91),\n ('scale', 91),\n ('quantitative', 91),\n ('establish', 91),\n ('operate', 91),\n ('budget', 91),\n ('Director', 91),\n ('delivery', 90),\n ('recognize', 90),\n ('potential', 90),\n ('technique', 90),\n ('characteristic', 89),\n ('additional', 89),\n ('Company', 89),\n ('email', 89),\n ('personal', 89),\n ('annual', 88),\n ('accurate', 88),\n ('present', 87),\n ('addition', 87),\n ('wide', 87),\n ('open', 87),\n ('post', 87),\n ('take', 86),\n ('engage', 86),\n ('similar', 86),\n ('Language', 86),\n ('commitment', 86),\n ('assessment', 86),\n ('Oracle', 86),\n ('energy', 85),\n ('Power', 85),\n ('military', 85),\n ('government', 85),\n ('execute', 85),\n ('directly', 84),\n ('outcome', 84),\n ('York', 84),\n ('Team', 84),\n ('Health', 84),\n ('vendor', 84),\n ('integration', 83),\n ('infrastructure', 83),\n ('Technology', 83),\n ('remote', 82),\n ('flexible', 82),\n ('contribute', 82),\n ('complete', 82),\n ('Develop', 82),\n ('advance', 81),\n ('query', 81),\n ('independently', 81),\n ('achieve', 81),\n ('efficiency', 81),\n ('Applicants', 81),\n ('track', 81),\n ('Administration', 81),\n ('balance', 80),\n ('revenue', 80),\n ('block', 80),\n ('set', 80),\n ('guide', 79),\n ('production', 79),\n ('consistent', 79),\n ('bonus', 79),\n ('place', 79),\n ('statistical', 78),\n ('pace', 78),\n ('Project', 78),\n ('multi', 78),\n ('healthcare', 78),\n ('enhance', 78),\n ('hand', 77),\n ('share', 77),\n ('Responsibilities', 77),\n ('demand', 77),\n ('structure', 77),\n ('execution', 77),\n ('prepare', 77),\n ('class', 76),\n ('physical', 76),\n ('UnitedHealth', 76),\n ('related', 76),\n ('disclose', 76),\n ('perspective', 76),\n ('law', 76),\n ('Programming', 76),\n ('expert', 75),\n ('Planning', 75),\n ('administration', 75),\n ('point', 75),\n ('inform', 75),\n ('Cloud', 75),\n ('Customer', 74),\n ('workforce', 74),\n ('desire', 74),\n ('executive', 74),\n ('healthy', 73),\n ('question', 73),\n ('Solutions', 73),\n ('response', 73),\n ('asset', 73),\n ('increase', 73),\n ('machine', 73),\n ('start', 72),\n ('methodology', 72),\n ('list', 72),\n ('integrity', 72),\n ('investigation', 72),\n ('timely', 72),\n ('Design', 71),\n ('expect', 71),\n ('clear', 71),\n ('order', 71),\n ('concept', 71),\n ('Government', 71),\n ('record', 71),\n ('automation', 71),\n ('fraud', 71),\n ('warehouse', 70),\n ('prove', 70),\n ('pipeline', 70),\n ('collaborative', 70),\n ('leverage', 70),\n ('Strong', 70),\n ('direction', 69),\n ('Lead', 69),\n ('home', 69),\n ('update', 69),\n ('target', 69),\n ('Working', 68),\n ('play', 68),\n ('contribution', 68),\n ('broad', 68),\n ('purpose', 68),\n ('Email', 68),\n ('continuous', 68),\n ('County', 68),\n ('mobility', 68),\n ('leave', 67),\n ('covid19', 67),\n ('modeling', 67),\n ('deadline', 67),\n ('fully', 67),\n ('credit', 67),\n ('understanding', 67),\n ('trust', 66),\n ('thinking', 66),\n ('deep', 66),\n ('Ability', 66),\n ('positive', 66),\n ('method', 66),\n ('interview', 66),\n ('visit', 66),\n ('Marketing', 66),\n ('week', 65),\n ('Education', 65),\n ('empower', 65),\n ('assess', 65),\n ('Enterprise', 65),\n ('manner', 65),\n ('description', 65),\n ('architecture', 65),\n ('total', 65),\n ('automate', 65),\n ('social', 65),\n ('power', 65),\n ('party', 64),\n ('Process', 64),\n ('collection', 64),\n ('Application', 63),\n ('align', 63),\n ('dynamic', 63),\n ('event', 63),\n ('promote', 62),\n ('begin', 62),\n ('actionable', 62),\n ('idea', 62),\n ('Reporting', 62),\n ('center', 62),\n ('recruitment', 62),\n ('Software', 62),\n ('partnership', 62),\n ('view', 62),\n ('Insurance', 62),\n ('incentive', 61),\n ('advisor', 61),\n ('schedule', 61),\n ('accounting', 61),\n ('accept', 61),\n ('PeopleSoft', 61),\n ('component', 60),\n ('assistance', 60),\n ('Excellent', 60),\n ('oral', 60),\n ('sdl2017', 60),\n ('proficiency', 60),\n ('submit', 60),\n ('Master', 60),\n ('unique', 60),\n ('corporate', 60),\n ('facilitate', 59),\n ('Washington', 59),\n ('Agile', 59),\n ('site', 59),\n ('associate', 59),\n ('interpersonal', 59),\n ('emerge', 59),\n ('hour', 59),\n ('developer', 58),\n ('generation', 58),\n ('Engineer', 58),\n ('finding', 58),\n ('ongoing', 58),\n ('integrate', 58),\n ('engagement', 58),\n ('Strategic', 58),\n ('resume', 58),\n ('FINRA', 58),\n ('million', 57),\n ('flexibility', 57),\n ('Policy', 57),\n ('Communication', 57),\n ('Federal', 57),\n ('Berkeley', 57),\n ('ideal', 57),\n ('secure', 57),\n ('coordinate', 57),\n ('monthly', 57),\n ('workflow', 57),\n ('meeting', 57),\n ('Analytical', 57),\n ('loss', 57),\n ('hybrid', 56),\n ('organize', 56),\n ('Employment', 56),\n ('foster', 56),\n ('Server', 56),\n ('optimize', 56),\n ('general', 56),\n ('influence', 56),\n ('Sales', 56),\n ('gather', 55),\n ('drug', 55),\n ('holiday', 55),\n ('difference', 55),\n ('Type', 55),\n ('resolve', 55),\n ('cyber', 55),\n ('transaction', 55),\n ('agile', 54),\n ('feedback', 54),\n ('involve', 54),\n ('actual', 54),\n ('validate', 54),\n ('prioritize', 54),\n ('online', 54),\n ('scope', 54),\n ('incident', 54),\n ('framework', 54),\n ('FPA', 54),\n ('Automation', 54),\n ('feel', 53),\n ('consumer', 53),\n ('efficient', 53),\n ('form', 53),\n ('principle', 53),\n ('Learning', 53),\n ('connect', 52),\n ('important', 52),\n ('category', 52),\n ('attention', 52),\n ('interest', 52),\n ('mental', 52),\n ('transformation', 52),\n ('independent', 52),\n ('oversee', 52),\n ('continue', 52),\n ('handle', 52),\n ('think', 52),\n ('Plan', 52),\n ('mitigation', 52),\n ('Fidelity', 52),\n ('train', 51),\n ('United', 51),\n ('depend', 51),\n ('face', 51),\n ('date', 51),\n ('produce', 51),\n ('audience', 51),\n ('scientist', 51),\n ('HUMINT', 51),\n ('clinical', 51),\n ('number', 50),\n ('Preferred', 50),\n ('reflect', 50),\n ('working', 50),\n ('States', 50),\n ('Quality', 50),\n ('consult', 50),\n ('accordance', 50),\n ('creative', 50),\n ('capacity', 50),\n ('license', 50),\n ('enhancement', 50),\n ('VyStar', 50),\n ('talent', 49),\n ('Time', 49),\n ('match', 49),\n ('legal', 49),\n ('Remote', 49),\n ('Life', 49),\n ('strive', 49),\n ('domain', 49),\n ('electric', 49),\n ('specification', 48),\n ('Action', 48),\n ('free', 48),\n ('ancestry', 48),\n ('passionate', 48),\n ('accuracy', 48),\n ('obtain', 48),\n ('Azure', 48),\n ('deploy', 48),\n ('translate', 48),\n ('selection', 48),\n ('check', 48),\n ('org', 48),\n ('regional', 48),\n ('interact', 48),\n ('guideline', 48),\n ('pge', 48),\n ('remotely', 47),\n ('measure', 47),\n ('qualify', 47),\n ('PowerPoint', 47),\n ('close', 47),\n ('robust', 47),\n ('active', 47),\n ('quickly', 47),\n ('Resources', 47),\n ('programming', 47),\n ('generate', 47),\n ('actively', 47),\n ('patient', 47),\n ('connection', 46),\n ('Affirmative', 46),\n ('travel', 46),\n ('discriminate', 46),\n ('proud', 46),\n ('consultant', 46),\n ('proactive', 46),\n ('type', 46),\n ('brand', 46),\n ('month', 46),\n ('link', 46),\n ('Research', 46),\n ('respect', 46),\n ('University', 46),\n ('real', 46),\n ('adjustment', 46),\n ('colleague', 45),\n ('option', 45),\n ('vary', 45),\n ('note', 45),\n ('Snowflake', 45),\n ('detailed', 45),\n ('coordination', 45),\n ('export', 45),\n ('stay', 45),\n ('pregnancy', 45),\n ('final', 45),\n ('Architecture', 45),\n ('follow', 45),\n ('Credit', 45),\n ('System', 45),\n ('authorization', 45),\n ('stock', 44),\n ('mean', 44),\n ('rule', 44),\n ('Proficiency', 44),\n ('Word', 44),\n ('Partner', 44),\n ('Relationship', 44),\n ('human', 44),\n ('discipline', 44),\n ('Public', 44),\n ('vaccine', 44),\n ('country', 44),\n ('coverage', 44),\n ('excellence', 44),\n ('successfully', 44),\n ('Java', 44),\n ('Specialist', 44),\n ('Colorado', 43),\n ('equitable', 43),\n ('Diversity', 43),\n ('modify', 43),\n ('meaningful', 43),\n ('governance', 43),\n ('Conduct', 43),\n ('possess', 43),\n ('exceptional', 43),\n ('cycle', 43),\n ('Build', 43),\n ('Range', 43),\n ('Compliance', 43),\n ('Cyber', 43),\n ('short', 43),\n ('supply', 43),\n ('sense', 43),\n ('Lincoln', 43),\n ('reward', 42),\n ('passion', 42),\n ('Benefits', 42),\n ('contractor', 42),\n ('commission', 42),\n ('alignment', 42),\n ('proficient', 42),\n ('limit', 42),\n ('material', 42),\n ('Division', 42),\n ('administrative', 42),\n ('commercial', 42),\n ('lifecycle', 42),\n ('Control', 42),\n ('Technical', 42),\n ('feature', 42),\n ('campus', 42),\n ('Center', 42),\n ('Deputy', 42),\n ('Florida', 42),\n ('aspect', 41),\n ('reach', 41),\n ('adhere', 41),\n ('maintenance', 41),\n ('acquisition', 41),\n ('extensive', 41),\n ('motivate', 41),\n ('Area', 41),\n ('Familiarity', 41),\n ('Forecasting', 41),\n ('Level', 41),\n ('capital', 41),\n ('collect', 41),\n ('guidance', 41),\n ('depth', 41),\n ('Salesforce', 41),\n ('architect', 41),\n ('mentor', 41),\n ('language', 40),\n ('transform', 40),\n ('provider', 40),\n ('Detail', 40),\n ('sound', 40),\n ('basic', 40),\n ('billion', 40),\n ('thrive', 40),\n ('student', 40),\n ('interpret', 40),\n ('Basic', 40),\n ('monitoring', 40),\n ('Port', 40),\n ('run', 39),\n ('low', 39),\n ('offering', 39),\n ('labor', 39),\n ('political', 39),\n ('vaccination', 39),\n ('statement', 39),\n ('Google', 39),\n ('motivated', 39),\n ('deliverable', 39),\n ('combination', 39),\n ('statistic', 39),\n ('charge', 39),\n ('extend', 39),\n ('solid', 39),\n ('input', 39),\n ('Travel', 39),\n ('Risk', 39),\n ('Best', 39),\n ('force', 39),\n ('interested', 38),\n ('sector', 38),\n ('stack', 38),\n ('regular', 38),\n ('America', 38),\n ('resolution', 38),\n ('comfortable', 38),\n ('Vision', 38),\n ('Economics', 38),\n ('discretion', 38),\n ('file', 38),\n ('award', 38),\n ('Professional', 38),\n ('optimization', 38),\n ('Attention', 38),\n ('Bank', 38),\n ('entire', 37),\n ('Salary', 37),\n ('primary', 37),\n ('Manage', 37),\n ('Medical', 37),\n ('represent', 37),\n ('Position', 37),\n ('college', 37),\n ('embrace', 37),\n ('love', 37),\n ('ecosystem', 37),\n ('banking', 37),\n ('mitigate', 37),\n ('store', 37),\n ('discrimination', 37),\n ('vacation', 37),\n ('expectation', 37),\n ('learning', 37),\n ('budgeting', 37),\n ('Delivery', 37),\n ('peer', 36),\n ('mindset', 36),\n ('vaccinated', 36),\n ('exceed', 36),\n ('owner', 36),\n ('evolve', 36),\n ('remain', 36),\n ('classification', 36),\n ('locate', 36),\n ('special', 36),\n ('economic', 36),\n ('creation', 36),\n ('nice', 36),\n ('debt', 36),\n ('Platform', 36),\n ('Candidates', 35),\n ('history', 35),\n ('consulting', 35),\n ('Dental', 35),\n ('comply', 35),\n ('university', 35),\n ('channel', 35),\n ('interface', 35),\n ('proactively', 35),\n ('edge', 35),\n ('Location', 35),\n ('nation', 35),\n ('Advanced', 35),\n ('choice', 34),\n ('income', 34),\n ('scalable', 34),\n ('geographic', 34),\n ('Assurance', 34),\n ('effectiveness', 34),\n ('transparency', 34),\n ('Artificial', 34),\n ('agreement', 34),\n ('Chief', 34),\n ('Strategy', 34),\n ('institution', 34),\n ('Asset', 34),\n ('completion', 34),\n ('volunteer', 34),\n ('click', 34),\n ('processing', 34),\n ('journey', 34),\n ('Client', 34),\n ('splunk', 34),\n ('Visual', 34),\n ('maximize', 34),\n ('quarter', 33),\n ('tech', 33),\n ('citizenship', 33),\n ('Equity', 33),\n ('North', 33),\n ('Statistics', 33),\n ('starter', 33),\n ('Union', 33),\n ('invest', 33),\n ('proposal', 33),\n ('Perform', 33),\n ('Fair', 33),\n ('space', 33),\n ('past', 33),\n ('natural', 33),\n ('escalate', 33),\n ('Privacy', 33),\n ('Executive', 33),\n ('retirement', 33),\n ('pricing', 33),\n ('Vice', 33),\n ('today', 32),\n ('Base', 32),\n ('gain', 32),\n ('curious', 32),\n ('criminal', 32),\n ('estimate', 32),\n ('Analyze', 32),\n ('troubleshoot', 32),\n ('Access', 32),\n ('daily', 32),\n ('conviction', 32),\n ('forefront', 32),\n ('Veterans', 32),\n ('relation', 32),\n ('cover', 32),\n ('volume', 32),\n ('ownership', 32),\n ('Capital', 32),\n ('progress', 32),\n ('loan', 32),\n ('Fraud', 32),\n ...]"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = df['任职要求'].str.split().explode().tolist()\n",
    "count = Counter(data).most_common()\n",
    "count"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
